home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / proc_fs.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  8KB  |  260 lines

  1. #ifndef _LINUX_PROC_FS_H
  2. #define _LINUX_PROC_FS_H
  3.  
  4. #include <linux/config.h>
  5. #include <linux/slab.h>
  6. #include <linux/fs.h>
  7. #include <asm/atomic.h>
  8.  
  9. /*
  10.  * The proc filesystem constants/structures
  11.  */
  12.  
  13. /*
  14.  * Offset of the first process in the /proc root directory..
  15.  */
  16. #define FIRST_PROCESS_ENTRY 256
  17.  
  18.  
  19. /*
  20.  * We always define these enumerators
  21.  */
  22.  
  23. enum {
  24.     PROC_ROOT_INO = 1,
  25. };
  26.  
  27. #define PROC_SUPER_MAGIC 0x9fa0
  28.  
  29. /*
  30.  * This is not completely implemented yet. The idea is to
  31.  * create an in-memory tree (like the actual /proc filesystem
  32.  * tree) of these proc_dir_entries, so that we can dynamically
  33.  * add new files to /proc.
  34.  *
  35.  * The "next" pointer creates a linked list of one /proc directory,
  36.  * while parent/subdir create the directory structure (every
  37.  * /proc file has a parent, but "subdir" is NULL for all
  38.  * non-directory entries).
  39.  *
  40.  * "get_info" is called at "read", while "owner" is used to protect module
  41.  * from unloading while proc_dir_entry is in use
  42.  */
  43.  
  44. typedef    int (read_proc_t)(char *page, char **start, off_t off,
  45.               int count, int *eof, void *data);
  46. typedef    int (write_proc_t)(struct file *file, const char __user *buffer,
  47.                unsigned long count, void *data);
  48. typedef int (get_info_t)(char *, char **, off_t, int);
  49.  
  50. struct proc_dir_entry {
  51.     unsigned int low_ino;
  52.     unsigned short namelen;
  53.     const char *name;
  54.     mode_t mode;
  55.     nlink_t nlink;
  56.     uid_t uid;
  57.     gid_t gid;
  58.     unsigned long size;
  59.     struct inode_operations * proc_iops;
  60.     struct file_operations * proc_fops;
  61.     get_info_t *get_info;
  62.     struct module *owner;
  63.     struct proc_dir_entry *next, *parent, *subdir;
  64.     void *data;
  65.     read_proc_t *read_proc;
  66.     write_proc_t *write_proc;
  67.     atomic_t count;        /* use count */
  68.     int deleted;        /* delete flag */
  69. };
  70.  
  71. struct kcore_list {
  72.     struct kcore_list *next;
  73.     unsigned long addr;
  74.     size_t size;
  75. };
  76.  
  77. #ifdef CONFIG_PROC_FS
  78.  
  79. extern struct proc_dir_entry proc_root;
  80. extern struct proc_dir_entry *proc_root_fs;
  81. extern struct proc_dir_entry *proc_net;
  82. extern struct proc_dir_entry *proc_net_stat;
  83. extern struct proc_dir_entry *proc_bus;
  84. extern struct proc_dir_entry *proc_root_driver;
  85. extern struct proc_dir_entry *proc_root_kcore;
  86.  
  87. extern void proc_root_init(void);
  88. extern void proc_misc_init(void);
  89.  
  90. struct mm_struct;
  91.  
  92. struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, struct nameidata *);
  93. struct dentry *proc_pid_unhash(struct task_struct *p);
  94. void proc_pid_flush(struct dentry *proc_dentry);
  95. int proc_pid_readdir(struct file * filp, void * dirent, filldir_t filldir);
  96. unsigned long task_vsize(struct mm_struct *);
  97. int task_statm(struct mm_struct *, int *, int *, int *, int *);
  98. char *task_mem(struct mm_struct *, char *);
  99.  
  100. extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
  101.                         struct proc_dir_entry *parent);
  102. extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent);
  103.  
  104. extern struct vfsmount *proc_mnt;
  105. extern int proc_fill_super(struct super_block *,void *,int);
  106. extern struct inode *proc_get_inode(struct super_block *, unsigned int, struct proc_dir_entry *);
  107.  
  108. extern int proc_match(int, const char *,struct proc_dir_entry *);
  109.  
  110. /*
  111.  * These are generic /proc routines that use the internal
  112.  * "struct proc_dir_entry" tree to traverse the filesystem.
  113.  *
  114.  * The /proc root directory has extended versions to take care
  115.  * of the /proc/<pid> subdirectories.
  116.  */
  117. extern int proc_readdir(struct file *, void *, filldir_t);
  118. extern struct dentry *proc_lookup(struct inode *, struct dentry *, struct nameidata *);
  119.  
  120. extern struct file_operations proc_kcore_operations;
  121. extern struct file_operations proc_kmsg_operations;
  122. extern struct file_operations ppc_htab_operations;
  123.  
  124. /*
  125.  * proc_tty.c
  126.  */
  127. struct tty_driver;
  128. extern void proc_tty_init(void);
  129. extern void proc_tty_register_driver(struct tty_driver *driver);
  130. extern void proc_tty_unregister_driver(struct tty_driver *driver);
  131.  
  132. /*
  133.  * proc_devtree.c
  134.  */
  135. struct device_node;
  136. extern void proc_device_tree_init(void);
  137. #ifdef CONFIG_PROC_DEVICETREE
  138. extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *);
  139. #else /* !CONFIG_PROC_DEVICETREE */
  140. static inline void proc_device_tree_add_node(struct device_node *np, struct proc_dir_entry *pde)
  141. {
  142.     return;
  143. }
  144. #endif /* CONFIG_PROC_DEVICETREE */
  145.  
  146. extern struct proc_dir_entry *proc_symlink(const char *,
  147.         struct proc_dir_entry *, const char *);
  148. extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *);
  149. extern struct proc_dir_entry *proc_mkdir_mode(const char *name, mode_t mode,
  150.             struct proc_dir_entry *parent);
  151.  
  152. static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
  153.     mode_t mode, struct proc_dir_entry *base, 
  154.     read_proc_t *read_proc, void * data)
  155. {
  156.     struct proc_dir_entry *res=create_proc_entry(name,mode,base);
  157.     if (res) {
  158.         res->read_proc=read_proc;
  159.         res->data=data;
  160.     }
  161.     return res;
  162. }
  163.  
  164. static inline struct proc_dir_entry *create_proc_info_entry(const char *name,
  165.     mode_t mode, struct proc_dir_entry *base, get_info_t *get_info)
  166. {
  167.     struct proc_dir_entry *res=create_proc_entry(name,mode,base);
  168.     if (res) res->get_info=get_info;
  169.     return res;
  170. }
  171.  
  172. static inline struct proc_dir_entry *proc_net_create(const char *name,
  173.     mode_t mode, get_info_t *get_info)
  174. {
  175.     return create_proc_info_entry(name,mode,proc_net,get_info);
  176. }
  177.  
  178. static inline struct proc_dir_entry *proc_net_fops_create(const char *name,
  179.     mode_t mode, struct file_operations *fops)
  180. {
  181.     struct proc_dir_entry *res = create_proc_entry(name, mode, proc_net);
  182.     if (res)
  183.         res->proc_fops = fops;
  184.     return res;
  185. }
  186.  
  187. static inline void proc_net_remove(const char *name)
  188. {
  189.     remove_proc_entry(name,proc_net);
  190. }
  191.  
  192. #else
  193.  
  194. #define proc_root_driver NULL
  195. #define proc_net NULL
  196. #define proc_bus NULL
  197.  
  198. #define proc_net_fops_create(name, mode, fops)  ({ (void)(mode), NULL; })
  199. #define proc_net_create(name, mode, info)    ({ (void)(mode), NULL; })
  200. static inline void proc_net_remove(const char *name) {}
  201.  
  202. static inline struct dentry *proc_pid_unhash(struct task_struct *p) { return NULL; }
  203. static inline void proc_pid_flush(struct dentry *proc_dentry) { }
  204.  
  205. static inline struct proc_dir_entry *create_proc_entry(const char *name,
  206.     mode_t mode, struct proc_dir_entry *parent) { return NULL; }
  207.  
  208. #define remove_proc_entry(name, parent) do {} while (0)
  209.  
  210. static inline struct proc_dir_entry *proc_symlink(const char *name,
  211.         struct proc_dir_entry *parent,const char *dest) {return NULL;}
  212. static inline struct proc_dir_entry *proc_mkdir(const char *name,
  213.     struct proc_dir_entry *parent) {return NULL;}
  214.  
  215. static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
  216.     mode_t mode, struct proc_dir_entry *base, 
  217.     read_proc_t *read_proc, void * data) { return NULL; }
  218. static inline struct proc_dir_entry *create_proc_info_entry(const char *name,
  219.     mode_t mode, struct proc_dir_entry *base, get_info_t *get_info)
  220.     { return NULL; }
  221.  
  222. struct tty_driver;
  223. static inline void proc_tty_register_driver(struct tty_driver *driver) {};
  224. static inline void proc_tty_unregister_driver(struct tty_driver *driver) {};
  225.  
  226. extern struct proc_dir_entry proc_root;
  227.  
  228. #endif /* CONFIG_PROC_FS */
  229.  
  230. #if !defined(CONFIG_PROC_KCORE)
  231. static inline void kclist_add(struct kcore_list *new, void *addr, size_t size)
  232. {
  233. }
  234. #else
  235. extern void kclist_add(struct kcore_list *, void *, size_t);
  236. #endif
  237.  
  238. struct proc_inode {
  239.     struct task_struct *task;
  240.     int type;
  241.     union {
  242.         int (*proc_get_link)(struct inode *, struct dentry **, struct vfsmount **);
  243.         int (*proc_read)(struct task_struct *task, char *page);
  244.     } op;
  245.     struct proc_dir_entry *pde;
  246.     struct inode vfs_inode;
  247. };
  248.  
  249. static inline struct proc_inode *PROC_I(const struct inode *inode)
  250. {
  251.     return container_of(inode, struct proc_inode, vfs_inode);
  252. }
  253.  
  254. static inline struct proc_dir_entry *PDE(const struct inode *inode)
  255. {
  256.     return PROC_I(inode)->pde;
  257. }
  258.  
  259. #endif /* _LINUX_PROC_FS_H */
  260.